iT邦幫忙

2022 iThome 鐵人賽

DAY 17
0
Web 3

從心出發認識Web3系列 第 17

[Day 17] 區塊鏈實作—訊息和編碼

  • 分享至 

  • xImage
  •  

今天要來介紹的是區塊鏈的訊息和編碼,對內容有興趣的歡迎一起看下去喔!

Block區塊鏈訊息

block.timestamp:指的是當前區塊的時間戳,使用UNIX時間秒(指的是從UTC1970年1月1日0時0分0秒起至現在的總秒數,不考慮閏秒),執行於兩個區塊間,代表的時間不一定是正確的,只顯示於兩者間的某處。
block.basefee:指的是當前區塊的基本費用
block.coinbase:指的是當前區塊的礦工網址
block.difficulty:指的是當前區塊難度
block.gaslimit:指的是當前區塊的gas limit(對於什麼是gas不了解的人可以到[Day 13] 認識以太坊看看,那篇有稍微提到~~)
block.number:指的是當前區塊的編號

小實作:計算當前時間加一天後的時間
https://ithelp.ithome.com.tw/upload/images/20221002/20152357ysejYlWyfg.png

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Practicetime2{
    function tomorrow () public view returns(uint){
        uint now = block.timestamp;
        return now + 86400;
    }
}

https://ithelp.ithome.com.tw/upload/images/20221002/20152357BJmRmpRcU8.png

當要將內容發送給合約時,需解讀成能讓合約讀懂的數據型態,因而才有編碼解碼的出現。

用ABI進行編碼(encode)&解碼(decode)

● 對特定參數進行編碼:abi.encode(data,(uint…)) returns (bytes memory)
● 對特定資料進行解碼:abi.decode(bytes memory encoded data,(…))returns(…)
https://ithelp.ithome.com.tw/upload/images/20221002/20152357Imq7feqSwQ.png

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Practicetime3{
    function encode(string memory  _str1, string memory  _str2, uint _uint)
 public returns (bytes memory) {
      return (abi.encode(_str1, _str2, _uint)); 
      }
   function decode(bytes memory data)
   public returns(string memory  _str1, string memory  _str2, uint _number){
       (_str1, _str2, _number) = abi.decode(data,(string,string, uint));
   }
}

https://ithelp.ithome.com.tw/upload/images/20221002/20152357OL8oJBy5Nh.png

今日心得:

在撰寫智慧合約時一定少不了區塊的相關訊息,而透過編碼讓合約解讀也是一個很重要的流程之一。
今天的內容主要是Solidity訊息和編碼的介紹,感謝看到最後的你~~~/images/emoticon/emoticon41.gif
參考書籍:Solidity實戰全書
參考資料: https://www.panewslab.com/zh_hk/articledetails/D04801114.html


上一篇
[Day 16] 區塊鏈實作—用Solidity呼叫函數
下一篇
[Day 18] 區塊鏈實作—合約的繼承
系列文
從心出發認識Web330
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言